"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/11/6 9:27
@Description :  进程和线程
计算机中运行程序   使用计算机资源   内存  cpu
运行一个计算机程序    开辟进程  资源分配的最小单位
QQ音乐    内存  cpu  单核
  功能:   1. 播放歌曲
          2.显示歌词
          3.搜索歌曲
          4.下载歌曲
线程： 执行任务的最小单元
在一个进程中可以有多个线程，多个线程之间共享进程申请的资源  一个进程中至少要有一个线程  主线程

并发:  多个线程任务交替执行
并行： 多个线程任务同时执行
"""
import os
import time
import multiprocessing


#  运行在一个线程中  顺序执行  下载网络资源   图片   list= [url，url，url]  for  等待

# 唱歌
def sing():
    print(f'sing 任务执行的进程编号是:{os.getpid()},父进程编号:{os.getppid()}')
    for i in range(3):
        print('唱歌')
        time.sleep(1)

# 跳舞
def dance():
    print(f'dance 任务执行的进程编号是:{os.getpid()},父进程编号:{os.getppid()}')
    for i in range(3):
        print('跳舞')
        time.sleep(0.5)

if __name__ == '__main__':
    # 获取进程编号
    print(f'main 编号:{os.getpid()}')
    # 在主线程中  唱歌和跳舞 顺序执行   同时执行   1. 多进程   2. 多线程
    # 创建进程  参数 进程需要完成的任务
    multiprocessing1 = multiprocessing .Process(target=dance)
    multiprocessing2 = multiprocessing .Process(target=sing)

    # 设置守护进程   主进程结束 则会立即停止守护进程的执行
    multiprocessing1.daemon = True
    multiprocessing2.daemon = True
    # 开启进程
    multiprocessing1.start()
    multiprocessing2.start()

    time.sleep(2)

    # 默认情况下  主进程会等待子进程中的任务全部执行结束后再结束
    print('------------------主进程执行结束---------------------')
